package view;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import model.Arena;

import controler.GameControler;
import controler.InputHandler;

public class KeyboardInputHandler implements KeyListener {
	private static KeyboardInputHandler instance = null;

	/**
	 * Construtor da classe KeyboardInputHandler. Armazena em instance a
	 * inst�ncia da classe KeyboardInputHandler, para que exista apenas uma
	 * refer�ncia.
	 */
	public KeyboardInputHandler() {
		KeyboardInputHandler.instance = this;
	}

	/**
	 * M�todo de acesso � instancia da classe KeyboardInputHandler. esse
	 * m�todo deve ser chamado depois da inicializacao da inst�ncia
	 * atrav�s do construtor
	 * 
	 * @return Uma inst�ncia da classe KeyboardInputHandler.
	 */
	public static KeyboardInputHandler instanceOf() {
		return instance;
	}

	/**
	 * M�todo para o tratamento de uma tecla sendo apertada, no momento nada
	 * � feito, mas pode ser usado para tratar eventos como "ctrl+a" difetente
	 * de "a"
	 */
	public void keyPressed(KeyEvent e) {
	}

	/**
	 * M�todo para o tratamento de uma tecla sendo solta, no momento nada �
	 * feito, mas pode ser usado para tratar eventos como "ctrl+a" difetente de
	 * "a"
	 */
	public void keyReleased(KeyEvent e) {
	}

	/**
	 * M�todo para o tratamento de uma tecla sendo digitada, dependendo da
	 * tecla o m�todo a reconhece como um atalho para alguma a��o e chama
	 * o InputHandler para lidar com esse comando do usu�rio.
	 */
	public void keyTyped(KeyEvent e) {
		char c = e.getKeyChar();
		if (c == '1') {
			if (!Arena.instanceOf().getBobs().isEmpty()) {
				Arena.instanceOf().setSelected(
						Arena.instanceOf().getBobs().get(0));
			}
		}
		if (c == '2') {
			if (!Arena.instanceOf().getBobs().isEmpty()) {
				Arena.instanceOf().setSelected(
						Arena.instanceOf().getBobs().get(1));
			}
		}
		if (c == '3') {
			if (!Arena.instanceOf().getBobs().isEmpty()) {
				Arena.instanceOf().setSelected(
						Arena.instanceOf().getBobs().get(2));
			}
		}
		if (c == '4') {
			if (!Arena.instanceOf().getBobs().isEmpty()) {
				Arena.instanceOf().setSelected(
						Arena.instanceOf().getBobs().get(3));
			}
		}
		if (c == '5') {
			if (!Arena.instanceOf().getBobs().isEmpty()) {
				Arena.instanceOf().setSelected(
						Arena.instanceOf().getBobs().get(4));
			}
		}
		if (c == '6') {
			if (!Arena.instanceOf().getBobs().isEmpty()) {
				Arena.instanceOf().setSelected(
						Arena.instanceOf().getBobs().get(5));
			}
		}
		if (c == 'k')
			InputHandler.instanceOf().pressButton("Kick");
		else if (c == 'p')
			InputHandler.instanceOf().pressButton("Punch");
		else if (c == 'j')
			InputHandler.instanceOf().pressButton("Jump");
		else if (c == 'w')
			InputHandler.instanceOf().pressButton("Wave");
		else if (c == 'h')
			InputHandler.instanceOf().pressButton("Hadoken");
		else if (c == 'c')
			InputHandler.instanceOf().pressButton("Clone");
		else if (c == 'a')
			InputHandler.instanceOf().oneClickOn(40, 5);
		else if (c == 's')
			InputHandler.instanceOf().twoClickOn(5, 5);
		else if (c == 'd')
			InputHandler.instanceOf().twoClickOn(40, 25);
		else if (c == 'f')
			InputHandler.instanceOf().oneClickOn(5, 25);
		else if (c == '+')
			GameControler.instanceOf().faster();
		else if (c == '-')
			GameControler.instanceOf().slower();
	}
}
